9.Spring Boot事务 您所在的位置:网站首页 spring framework 和spring boot 9.Spring Boot事务

9.Spring Boot事务

2023-06-15 17:20| 来源: 网络整理| 查看: 265

目录

1. Spring Boot基本介绍及Eclipse插件安装(STS)

2. Spring Boot基本使用(Thymeleaf模板、国际化)

3. Spring Boot使用Thymeleaf模板引擎

4. Thymeleaf标签详细

5. Spring Boot自动配置

6. Spring Boot配置文件(yml、properties)

7. Spring Boot集成常用配置参数

8. Spring Boot常用注解及JPA注解

9. Spring Boot事务

10. Spring Boot热部署

11. Spring Boot中使用JSP

12. Spirng Boot自定义错误页面

13. Spring Boot防止表单重复提交实现方式

14. Spring Boot监听器、过滤器、拦截器

15. Spring Boot单元测试(Service、Mock、Feign、Http Rest API)

16. Spring Boot多线程基本使用

17. Spring Boot加载指定YML文件

Spring Boot事务 目录Spring Boot事务1.导入Spring Boot提供的JDBC和JPA依赖2.@Transactional的使用(1)隔离级别(2)传播行为 3.在Spring Boot中使用@Transactional注解4.在访问数据库的Service方法上添加注解@Transactional注解即可

Spring Boot事务 1.导入Spring Boot提供的JDBC和JPA依赖 org.springframework.boot spring-boot-starter-jdbc org.springframework.boot spring-boot-starter-data-jpa

使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖的时候,Spring Boot会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager,并进行一系列的事务初始化操作,所以不需要任何额外配置就可以用@Transactional注解进行事务的使用。

虽然在传统的工程中也可以使用@Transactional注解来申明事务,但是还是需要使用XML来配置事务管理器(DataSourceTransactionManager)

Spring Boot在注入DataSourceTransactionManager事务管理器时,是如何找到我们配置的DataSource数据源的呢? Spring Boot会自动到Spring容器中寻找我们配置好的DataSource。也即是之前的手动操作,现在使用Spring Boot变成了自动化操作

2.@Transactional的使用

@Transactional不仅可以注解在方法上,也可以注解在类上。当注解在类上的时候意味着此类的所publi方法都是开启事务的。如果类级别和方法级别同时使用了@Transactional注解,则使用在类级别的注解会重载方法级别的注解

使用@Transactional注解进行事务控制时,可以在其中添加有关“隔离级别”和“传播行为”的指定:

(1)隔离级别 隔离级别描述DEFAULT默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是:READ_COMMITTEDREAD_UNCOMMITTED表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读和不可重复读,因此很少使用该隔离级别READ_COMMITTED表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值REPEATABLE_READ表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。该级别可以防止脏读和不可重复读SERIALIZABLE所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别

指定方法:通过使用isolation属性设置,例如:@Transactional(isolation = Isolation.DEFAULT)

(2)传播行为 传播行为描述REQUIRED如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务SUPPORTS如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行MANDATORY如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常REQUIRES_NEW创建一个新的事务,如果当前存在事务,则把当前事务挂起NOT_SUPPORTED以非事务方式运行,如果当前存在事务,则把当前事务挂起NEVER以非事务方式运行,如果当前存在事务,则抛出异常NESTED如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于REQUIRED

指定方法:通过使用 propagation 属性设置

例如:@Transactional(propagation = Propagation.REQUIRED)

3.在Spring Boot中使用@Transactional注解

只需要在启动类上添加@EnableTransactionManagement注解开启事务支持

@EnableTransactionManagement //开启声明式事务 @SpringBootApplication // Sprnig Boot项目的核心注解,主要目的是开启自动配置 public class MainApplication { // 该main方法作为项目启动的入口 public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } } 4.在访问数据库的Service方法上添加注解@Transactional注解即可 @Service("userService") public class UserServiceImpl implements UserService{ @Autowired private UserMapper userMapper; @Override @Transactional public User findUserById(int id) { return userMapper.findUserById(id); } }

使用自定义的事务管理器,可以在配置类中设置自定义事务管理器,并以@Bean暴露给Spring容器



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有